package tech.heptagram.staff.mapper;

import org.apache.ibatis.annotations.Param;

import java.util.List;

import tech.heptagram.staff.model.Staff;
import tech.heptagram.staff.query.StaffQuery;

/**
 * @author wang.yuchuan
 * @date 2018/8/30
 */
public interface StaffMapper {

    /**
     * 根据指定条件查询单个员工信息
     *
     * @param staffQuery 查询条件
     * @return 员工对象
     */
    Staff selectStaff(StaffQuery staffQuery);

    /**
     * 根据关键字查指定员工, 包括拼音、手机号或邮箱
     *
     * @param key
     * @return
     */
    Staff selectByAuthKey(String key);

    /**
     * 根据指定条件查询所有符合条件的员工列表
     *
     * @param staffQuery 查询条件
     * @return 符合条件的员工对象列表
     */
    List<Staff> selectStaffs(StaffQuery staffQuery);

    /**
     * 更新员工花名
     *
     * @param staffCode 员工编码
     * @param nickName  花名
     */
    void updateNickname(@Param("staffCode") String staffCode, @Param("nickName") String nickName);


    /**
     * 查找员工信息（为了保存信息时去重）
     *
     * @param staff 查询条件
     * @return 员工信息
     */
    Staff selectStaffForChecking(Staff staff);

    /**
     * 根据花名获取员工
     *
     * @param nickName
     * @return
     */
    Staff selectByNickName(String nickName);

    /**
     * 保存员工信息
     *
     * @param staff 员工信息
     * @return
     */
    int insert(Staff staff);

    /**
     * 修改员工信息
     *
     * @param staff 员工信息
     */
    void updateStaff(Staff staff);

    /**
     * 修改员工离职状态
     */
    int updateStatus(@Param("code") String code, @Param("status") Integer status, @Param("dimissionTime") String dimissionTime, @Param("modifiedBy") String modifiedBy);

    /**
     * 根据部门ID查询
     * @param departmentId 部门ID
     * @return 员工列表
     */
    List<Staff> selectByDepartmentId(Integer departmentId);

    List<String> selectStaffCodeListByDeptIdList(@Param("deptIdList") List<Integer> deptIdList);
}
